package com.javaee.ch14.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import java.util.Random;
import java.util.concurrent.TimeUnit;


@Service
public class VerifyCodeService {

    private static final String REDIS_KEY_PREFIX = "auth:code:";

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    /**
     * 生成5位随机数字验证码，并存入 Redis（20秒有效）
     * @param phone 用户手机号
     * @return 生成的验证码
     */
    public String generateCode(String phone) {
        // 校验手机号格式
        if (phone == null || phone.length() < 5)
            throw new IllegalArgumentException("手机号格式有误");

        // 生成6位随机验证码，前补0
        String code = String.format("%06d", new Random().nextInt(100000));
        String key = REDIS_KEY_PREFIX + phone;

        // 存入Redis，120秒后自动过期
        redisTemplate.opsForValue().set(key, code, 120, TimeUnit.SECONDS);
        return code;
    }

    /**
     * 校验前端提交的验证码
     * @param phone 手机号
     * @param code 用户输入的验证码
     * @return 校验通过返回true，否则false
     */
    public boolean verifyCode(String phone, String code) {
        String key = REDIS_KEY_PREFIX + phone;
        Object cachedCode = redisTemplate.opsForValue().get(key);
        return code != null && code.equals(cachedCode);
    }
}